/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sv.com.intesal.proyecto.managed;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import sv.com.intesal.clases.LimpiarManaged;
import sv.com.intesal.clases.Mensaje;
import sv.com.intesal.compra.bean.Material;
import sv.com.intesal.proyecto.bean.DevolucionProyecto;
import sv.com.intesal.proyecto.bean.Proyecto;
import sv.com.intesal.proyecto.controlador.DevolucionProyectoControlador;
import sv.com.intesal.proyecto.controlador.ProyectoControlador;
import sv.com.intesal.rrhh.bean.Empleado;
import sv.com.intesal.rrhh.controlador.EmpleadoControlador;
import sv.com.intesal.seguridad.controlador.SessionControlador;
import sv.com.intesal.seguridad.managed.SessionManaged;

/**
 *
 * @author JM
 */
@ManagedBean(name = "devolucionProyectoManaged")
@ViewScoped
public class DevolucionProyectoManaged implements Serializable {

    private Boolean flag_1;
    private Boolean flag_2;
    private Mensaje m;
    private SessionManaged sm;
    private Empleado selectedEmpleado;
    private Proyecto selectedProyecto;
    private Material selectedMaterial;

    /*ENCA*/
    private DevolucionProyecto selectedEncaDevolucionProyecto = new DevolucionProyecto();

    /*DETA*/
    private List<DevolucionProyecto> detaDevolucionProyectos;
    private DevolucionProyecto selectedDetaDevolucionProyecto = new DevolucionProyecto();

    public DevolucionProyectoManaged() {

        this.flag_1 = true;
        this.flag_2 = false;
        m = new Mensaje();
        sm = new SessionManaged();
        selectedEmpleado = new Empleado();
        selectedProyecto = new Proyecto();
        selectedMaterial = new Material();

        this.selectedEncaDevolucionProyecto = new DevolucionProyecto();
        this.selectedDetaDevolucionProyecto = new DevolucionProyecto();
    }

    public void completeTransaction() {

        try {
            if (this.validar() == true) {
                if (this.getSelectedEncaDevolucionProyecto().getId_p() == null) {
                    if (sm.validar_rol_usuario("wfrmDevolucionProyecto", sm.agregar) == true) {

                        this.selectedEncaDevolucionProyecto.setId_e(this.getSelectedEmpleado().getId_e());
                        this.selectedEncaDevolucionProyecto.setId_p(this.getSelectedProyecto().getId_p());

                        DevolucionProyectoControlador dp = new DevolucionProyectoControlador();
                        dp.setEnca(this.getSelectedEncaDevolucionProyecto(), this.getDetaDevolucionProyectos());
                        LimpiarManaged.limpiar();
                    }
                } else {
                    if (sm.validar_rol_usuario("wfrmDevolucionProyecto", sm.modificar) == true) {

                        this.selectedEncaDevolucionProyecto.setId_e(this.getSelectedEmpleado().getId_e());
                        this.selectedEncaDevolucionProyecto.setId_p(this.getSelectedProyecto().getId_p());

                        DevolucionProyectoControlador dp = new DevolucionProyectoControlador();
                        dp.setEnca(this.getSelectedEncaDevolucionProyecto(), this.getDetaDevolucionProyectos());
                        LimpiarManaged.limpiar();
                    }
                }
            }
        } catch (Exception e) {
            m.messageError(m.getIerror());
            e.printStackTrace();
        }
    }

    public void eliminarRegistro() {
        try {
            if (this.selectedDetaDevolucionProyecto == null) {
                m.messageError("DEBE ELEGIR UN REGISTRO PARA CONTINUAR");
            } else if (selectedDetaDevolucionProyecto.getId_d() == 0) {
                this.detaDevolucionProyectos.remove(selectedDetaDevolucionProyecto);
                m.messageInfo(m.getIeliminada());
            } else {
                /*SI AFECTA INVENTARIO*/
                if (sm.validar_rol_usuario("wfrmDevolucionProyecto", sm.eliminar) == true) {
                    DevolucionProyectoControlador dc = new DevolucionProyectoControlador();
                    if (dc.validar_ItemEliminarDevolucion(selectedDetaDevolucionProyecto) == true) {
                        this.selectedDetaDevolucionProyecto.setNumero_documento_dp(this.getSelectedEncaDevolucionProyecto().getNumero_documento_dp());
                        this.selectedDetaDevolucionProyecto.setBloque_dp(this.getSelectedEncaDevolucionProyecto().getBloque_dp());
                        this.selectedDetaDevolucionProyecto.setId_dp(this.getSelectedEncaDevolucionProyecto().getId_dp());

                        this.detaDevolucionProyectos.remove(selectedDetaDevolucionProyecto);
                        dc.eliminarItem(selectedDetaDevolucionProyecto);
                    } else {
                        m.messageAdvertencia(m.getIcantidad());
                    }
                }
            }
        } catch (Exception e) {
            m.messageError(m.getIerror());
            e.printStackTrace();
        }
    }

    public void getMaterial_Quick(Material ma) {

        try {
            this.selectedMaterial = ma;
            if (this.getSelectedMaterial() != null) {
                List<DevolucionProyecto> lista = new ArrayList<DevolucionProyecto>();
                if (this.getDetaDevolucionProyectos() != null) {
                    lista = this.getDetaDevolucionProyectos();
                }

                DevolucionProyecto dp = new DevolucionProyecto();
                dp.setNombre_m(this.getSelectedMaterial().getNombre_m());
                dp.setId_d(0); //deta devolucion_proyecto
                dp.setId_dm(this.getSelectedMaterial().getId_dm());
                dp.setCantidad_d(0.0);
                lista.add(dp);
                this.setDetaDevolucionProyectos(lista);
            }
        } catch (Exception e) {
            m.messageError(m.getIerror());
            e.printStackTrace();
        }
    }

    private Boolean validar() throws Exception {

        try {
            Boolean value = true;
            if (this.getSelectedEmpleado().getId_e() == null) {
                m.messageError("DEBE ELEGIR UN EMPLEADO");
                value = false;
            }
            if (this.getSelectedProyecto().getId_p() == null) {
                m.messageError("DEBE ELEGIR UN PROYECTO");
                value = false;
            }
            if (this.getSelectedEncaDevolucionProyecto().getObservacion() == "") {
                m.messageAdvertencia(m.campoError("OBSERVACION"));
                value = false;
            }
            if (this.getSelectedEncaDevolucionProyecto().getFecha_dp() == null) {
                m.messageAdvertencia(m.campoError("FECHA"));
                value = false;
            }
            if (this.getDetaDevolucionProyectos() == null) {
                m.messageAdvertencia(m.campoError("MATERIALES"));
                value = false;
            } else if (this.detaDevolucionProyectos.size() > 0) {
                for (int i = 0; i < this.getDetaDevolucionProyectos().size(); i++) {
                    try {
                        if (this.detaDevolucionProyectos.get(i).getCantidad_d() <= 0) {
                            m.messageAdvertencia("HAY CANTIDADES QUE NO SON ACEPTABLES");
                            value = false;
                            break;
                        }
                    } catch (Exception e) {
                        value = false;
                        break;
                    }
                }
            }
            return value;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public void validarMoficarProceso() {
        SessionControlador sc = new SessionControlador();
        try {
            if (sc.getCodigo_Proceso_Modificar() != 0) {
                this.flag_1 = false;
                this.flag_2 = true;
                this.getDatosModificarProceso(sc.getCodigo_Proceso_Modificar());
                sc.setCodigo_Proceso_Modificar(0);
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    private void getDatosModificarProceso(Integer codigo_dp) throws Exception {
        try {
            DevolucionProyectoControlador dp = new DevolucionProyectoControlador();
            this.setSelectedEncaDevolucionProyecto(dp.getEnca(codigo_dp));

            ProyectoControlador pc = new ProyectoControlador();
            this.setSelectedProyecto(pc.getProyecto(this.getSelectedEncaDevolucionProyecto().getId_p()));

            EmpleadoControlador ec = new EmpleadoControlador();
            this.setSelectedEmpleado(ec.getEmpleado(this.getSelectedEncaDevolucionProyecto().getId_e()));

            detaDevolucionProyectos = (dp.getDeta(this.getSelectedEncaDevolucionProyecto().getId_dp()));

        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public void getProyecto_Quick(Proyecto p) {
        try {
            this.selectedProyecto = p;
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void getEmpleado_Quick(Empleado em) {
        try {
            this.selectedEmpleado = em;
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    /*GETTERS AND SETTERS */
    public Boolean getFlag_1() {
        return flag_1;
    }

    public void setFlag_1(Boolean flag_1) {
        this.flag_1 = flag_1;
    }

    public Boolean getFlag_2() {
        return flag_2;
    }

    public void setFlag_2(Boolean flag_2) {
        this.flag_2 = flag_2;
    }

    public DevolucionProyecto getSelectedDetaDevolucionProyecto() {
        if (selectedDetaDevolucionProyecto == null) {
            selectedDetaDevolucionProyecto = new DevolucionProyecto();
        }
        return selectedDetaDevolucionProyecto;
    }

    public void setSelectedDetaDevolucionProyecto(DevolucionProyecto selectedDetaDevolucionProyecto) {
        this.selectedDetaDevolucionProyecto = selectedDetaDevolucionProyecto;
    }

    public List<DevolucionProyecto> getDetaDevolucionProyectos() {
        return detaDevolucionProyectos;
    }

    public void setDetaDevolucionProyectos(List<DevolucionProyecto> detaDevolucionProyectos) {
        this.detaDevolucionProyectos = detaDevolucionProyectos;
    }

    public DevolucionProyecto getSelectedEncaDevolucionProyecto() {
        if (this.selectedEncaDevolucionProyecto == null) {
            this.selectedEncaDevolucionProyecto = new DevolucionProyecto();
        }
        return selectedEncaDevolucionProyecto;
    }

    public void setSelectedEncaDevolucionProyecto(DevolucionProyecto selectedEncaDevolucionProyecto) {
        this.selectedEncaDevolucionProyecto = selectedEncaDevolucionProyecto;
    }

    public Material getSelectedMaterial() {
        if (this.selectedMaterial == null) {
            this.selectedMaterial = new Material();
        }
        return selectedMaterial;
    }

    public void setSelectedMaterial(Material selectedMaterial) {
        this.selectedMaterial = selectedMaterial;
    }

    public Empleado getSelectedEmpleado() {
        if (this.selectedEmpleado == null) {
            this.selectedEmpleado = new Empleado();
        }
        return selectedEmpleado;
    }

    public void setSelectedEmpleado(Empleado selectedEmpleado) {
        this.selectedEmpleado = selectedEmpleado;
    }

    public Proyecto getSelectedProyecto() {
        if (this.selectedProyecto == null) {
            this.selectedProyecto = new Proyecto();
        }
        return selectedProyecto;
    }

    public void setSelectedProyecto(Proyecto selectedProyecto) {
        this.selectedProyecto = selectedProyecto;
    }
}